package com.demo.java.OD301_350.OD302;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【选修课】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146099363
 */
public class OdMain {
    public static void main(String[] args) {
        try (Scanner sc = new Scanner(System.in)) {
            // 读取第一行选修课1的学生数据
            String[] one = sc.nextLine().split(";");
            // 读取第二行选修课2的学生数据
            String[] two = sc.nextLine().split(";");

            // 使用HashMap存储选修课2的学生成绩，学号为键，成绩为值
            Map<String, Integer> tIds = new HashMap<>();
            for (String t : two) {
                String[] tStu = t.split(",");
                String tId = tStu[0];
                int tScore = Integer.parseInt(tStu[1]);
                tIds.put(tId, tScore);
            }

            // 创建比较器：先按成绩排序，再按学号排序
            Comparator<Student> stuComparator = Comparator.comparingInt(Student::getScore).reversed()
                    .thenComparing(Student::getId);

            // 使用TreeMap按班级分组，TreeSet按成绩排序
            TreeMap<String, TreeSet<Student>> map = new TreeMap<>();
            for (String s : one) {
                String[] sStu = s.split(",");
                String sId = sStu[0];

                // 如果选修课2中有该学生的成绩
                if (tIds.containsKey(sId)) {
                    int sScore = Integer.parseInt(sStu[1]);
                    int tScore = tIds.get(sId);
                    int totalScore = sScore + tScore;

                    // 获取学号的前五位作为班级标识
                    String cls = sId.substring(0, 5);

                    // 创建学生对象并加入到相应的班级中
                    Student student = new Student(sId, totalScore);
                    map.computeIfAbsent(cls, k -> new TreeSet<>(stuComparator)).add(student);
                }
            }

            // 如果没有符合条件的学生，输出NULL
            if (map.isEmpty()) {
                System.out.println("NULL");
            } else {
                // 遍历每个班级并输出学生信息
                map.forEach((key, value) -> {
                    System.out.println(key);
                    String res = String.join(";", value.stream().map(Student::getId).toArray(String[]::new));
                    System.out.println(res);
                });
            }
        }
    }

    // 学生类，用来保存学号和总成绩
    static class Student {
        String id;
        int score;

        public Student(String id, int score) {
            this.id = id;
            this.score = score;
        }

        public String getId() {
            return id;
        }

        public int getScore() {
            return score;
        }
    }
}